// authenticate.js passport策略配置文件
const passport = require('passport')
const User = require('./mongoose')
const createError = require('http-errors')
const LocalStrategy = require('passport-local').Strategy

// passport使用自定义的LocalStrategy策略，这也是passport验证的核心。
// User.authenticate()是passport-local-mongoose已经封装好的，会将_id,username挂载到req.user中
passport.use(new LocalStrategy(User.authenticate()))

// 这里使用的也是passport-local-mongoose封装好的序列化方法
// 序列化用户数据,默认把用户的id作为新建和查询的字段，你也可以自己配置。
passport.serializeUser(User.serializeUser())
// 反序列化用户数据，这两条的作用就是把用户的请求数据和数据库的数据一一对应起来。
passport.deserializeUser(User.deserializeUser())

// 导出验证的方法，这是基于session的。保存的session会持续在req上挂载user，只要判断有没有user，就能判断用户有没有登录
exports.verifyUser = (req, res, next) => {
    if (req.user) next()
    else next(createError(403,'请先登录！'))
}
